package com.tencent.protocol.simple_protocol;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.tencent.common.Configure;
import com.zkingsoft.plugin.util.LogUtil;

/**
 * 
 * @Description: 微信简单授权协议
 * @author:姜友瑶
 * @date 2016年10月14日
 */
public class SimpleProtol {

	/**
	 * 获取access_token
	 */
	public static String API_GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
			+ Configure.appID + "&secret=" + Configure.APPSECRET;

	/**
	 * 用户登录授权地址 重定向到本地页面，并返回Code <a href=
	 * "https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN">
	 * 官方说明地址 </a>
	 */
	public static String API_OAUTH2_USER_SQ = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="
			+ Configure.appID + "&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";

	/**
	 * 获得code后在ACCESS_TOKEN 返回接口凭证，授权用户唯一标识 <a href=
	 * "https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CN">
	 * 官方说明地址 </a>
	 */
	public static String API_OAUTH2_ACCESS_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
			+ Configure.appID + "&secret=" + Configure.APPSECRET + "&code=CODE&grant_type=authorization_code";

	/**
	 * 获得用户opendid后查询用户信息的接口 返回用户信息 <a href=
	 * "https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CN">
	 * 官方说明地址 </a>
	 */
	public static String API_OAUTH2_UESER_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";

	/**
	 * 公众号用于调用微信JS接口的临时票据 <a href=
	 * "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN">
	 * 官方说明地址 </a>
	 */
	public static String API_JSAPI_TICKET = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";

	/**
	 * 
	 * @Description: 公众号用于调用微信JS接口的临时票据
	 * @author:姜友瑶
	 * @param openId
	 * @param accessToken
	 * @return 返回类型 String
	 * @date 2016年10月14日
	 */
	public static String getJsapiTicket(String accessToken) {
		String url = API_JSAPI_TICKET.replace("ACCESS_TOKEN", accessToken);
		LogUtil.info(SimpleProtol.class, " buid URL getJspTicket=" + url);
		return url;
	}

	/**
	 * 
	 * @Description: 获取授权连接
	 * @author:姜友瑶
	 * @param redirectUrl
	 * @param scope
	 *            网页授权写 snsapi_login
	 * @return 返回类型 String
	 * @date 2016年10月14日
	 */
	public static String getUserSq(String redirectUrl, String scope, String state) {
		try {
			redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		String url = API_OAUTH2_USER_SQ.replace("REDIRECT_URI", redirectUrl).replace("SCOPE", scope).replace("STATE",
				state);
		LogUtil.info(SimpleProtol.class, " buid URL getUserSq=" + url);
		return url;
	}

	/**
	 * 
	 * @Description: 获取授权后查询access_token的连接
	 * @author:姜友瑶
	 * @param code
	 *            授权后返回的code
	 * @return 返回类型 String
	 * @date 2016年10月14日
	 */
	public static String getOAUTH2AccessToken(String code) {
		String url = API_OAUTH2_ACCESS_TOKEN.replace("CODE", code);
		LogUtil.info(SimpleProtol.class, " buid URL getOAUTH2AccessToken=" + url);
		return url;
	}

	/**
	 * 
	 * @Description: 获取access_token后使用access_token获取用户信息接口
	 * @author:姜友瑶
	 * @param code
	 *            授权后返回的code
	 * @return 返回类型 String
	 * @date 2016年10月14日
	 */
	public static String getOAUTH2UserInfo(String access_token, String openid) {
		String url = API_OAUTH2_UESER_INFO.replace("ACCESS_TOKEN", access_token).replaceAll("OPENID", openid);
		LogUtil.info(SimpleProtol.class, " buid URL getOAUTH2UserInfo=" + url);
		return url;
	}

	/**
	 * 
	 * @Description: 获取access_tokenApi
	 * @author:姜友瑶
	 * @param appid
	 * @param secret
	 * @return 返回类型 String
	 * @date 2016年10月14日
	 */
	public static String getAccess_tokenApi() {
		return API_GET_ACCESS_TOKEN;
	}

	public static void main(String[] args) {
		try {
			System.out.println(URLEncoder.encode("http:www.k.com?id=sad", "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
